home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_13_12 / colvin / runtime.cpp < prev    next >
C/C++ Source or Header  |  1995-10-10  |  1KB  |  50 lines

  1. ////////////////////////////////////////////////////////////
  2. // runtime.cpp                Copyright 1994 Gregory Colvin.
  3. //                    Free distribution OK with this notice.
  4. //
  5. // Runtime library patches to track working papers.
  6.  
  7. #include "runtime.h"
  8.  
  9. static new_handler cur_new_handler;
  10. new_handler set_new_handler(new_handler cur) throw() {
  11.    new_handler old= cur_new_handler;
  12.    cur_new_handler = cur;
  13.    return old;
  14. }
  15.  
  16. static void* allocate_loop(size_t n) {
  17.    void* p=0;
  18.    for(;;) {
  19.       p = allocate(n);
  20.       if (p || !cur_new_handler)
  21.          break;
  22.       cur_new_handler();
  23.    }
  24.    return p;
  25. }
  26.  
  27. void* operator new(size_t n) throw (bad_alloc) {
  28.    if (n == 0) n++;
  29.    void* p= allocate_loop(n);
  30.    if (!p)
  31.       throw bad_alloc();
  32.    return p;
  33. }
  34. void* operator new[](size_t n) throw(bad_alloc) {
  35.    if (n == 0) n++;
  36.    void* p= allocate_loop(n);
  37.    if (!p)
  38.       throw bad_alloc();
  39.    return p;
  40. }
  41.  
  42. void operator delete(void* p) throw() {
  43.    deallocate(p);
  44. }
  45. void operator delete[](void* p) throw() {
  46.    deallocate(p);
  47. }
  48.  
  49.  
  50.